## Faders

### Overview

Faders are a convenient way of performing some common audio tasks
without having to add complex code into your application.

The most common use for the faders is to fade audio in or out, adding
nice touches and polish.

Let's say you're exiting a bar and entering the street.

    soloud.fadeVolume(bar_ambience, 0, 2); // fade bar out in 2 seconds
    soloud.scheduleStop(bar_ambience, 2);  // stop the bar ambience after fadeout
    street_ambience = soloud.play(cars, 0);// start street ambience at 0 volume
    soloud.setProtectChannel(street_ambience, 1); // protect it
    soloud.fadeVolume(street_ambience, 1, 1.5f); // fade street in in 1.5

Or let's say you're quiting your game.

    soloud.fadeGlobalVolume(0, 1); // Fade out global volume in 1 second

The faders are only evaluated once per mix function call - in other
words, whenever the back end requests samples from SoLoud, which is
likely to be in chunks of 20-100ms, which is smoothly enough for most
uses.

The exception is volume (which includes panning), which gets
interpolated on per-sample basis to avoid artifacts.

The starting value for most faders is the current value.

### Soloud.fadeVolume()

Smoothly change a channel's volume over specified time.

    soloud.fadeVolume(orchestra, 1, 60); // The orchestra creeps in for a minute

The fader is disabled if you change the channel's volume with
setVolume()

\pagebreak


### Soloud.fadePan()

Smoothly change a channel's pan setting over specified time.

    soloud.setPan(racecar, -1); // set start value
    soloud.fadePan(racecar, 1, 0.5); // Swoosh!

The fader is disabled if you change the channel's panning with setPan()
or setPanAbsolute()

### Soloud.fadeRelativePlaySpeed()

Smoothly change a channel's relative play speed over specified time.

    soloud.fadeRelativePlaySpeed(hal, 0.1, 6); // Hal's message slows down

The fader is disabled if you change the channel's play speed with
setRelativePlaySpeed()

### Soloud.fadeGlobalVolume()

Smoothly change the global volume over specified time.

    soloud.fadeGlobalVolume(0, 2); // Fade everything out in 2 seconds

The fader is disabled if you change the global volume with
setGlobalVolume()

### Soloud.schedulePause()

After specified time, pause the channel

    soloud.fadeVolume(jukebox, 0, 2); // Fade out the music in 2 seconds
    soloud.schedulePause(jukebox, 2);    // Pause the music after 2 seconds

The scheduler is disabled if you set the pause state with setPause() or
setPauseAll().

\pagebreak


### Soloud.scheduleStop()

After specified time, stop the channel

    soloud.fadeVolume(applause, 0, 10); // Fade out the cheers for 10 seconds
    soloud.scheduleStop(applause, 10);     // Stop the sound after 10 seconds

There's no way (currently) to disable this scheduler.

### Soloud.oscillateVolume()

Set fader to oscillate the volume at specified frequency.

    soloud.oscillateVolume(murmur, 0, 0.2, 5); // murmur comes and goes

The fader is disabled if you change the channel's volume with
setVolume()

### Soloud.oscillatePan()

Set fader to oscillate the panning at specified frequency.

    soloud.oscillatePan(ambulance, -1, 1, 10); // Round and round it goes

The fader is disabled if you change the channel's panning with setPan()
or setPanAbsolute()

### Soloud.oscillateRelativePlaySpeed()

Set fader to oscillate the relative play speed at specified frequency.

    soloud.oscillateRelativePlaySpeed(vinyl, 0.9, 1.1, 3); // Wobbly record

The fader is disabled if you change the channel's play speed with
setRelativePlaySpeed()


\pagebreak

### Soloud.oscillateGlobalVolume()

Set fader to oscillate the global volume at specified frequency.

    soloud.oscillateGlobalVolume(0.5, 1.0, 0.2); // Go crazy

The fader is disabled if you change the global volume with
setGlobalVolume()

### Soloud.fadeFilterParameter()

Fades a parameter on a live instance of a filter. The filter must
support changing of live parameters; otherwise this call does nothing.

    soloud.fadeFilterParameter(h,3,FILTER::CUTOFF,1000,1); 
    // Fades h's 3rd filter CUTOFF to 1000 in 1 second

### Soloud.oscillateFilterParameter()

Oscillates a parameter on a live instance of a filter. The filter must
support changing of live parameters; otherwise this call does nothing.

    soloud.setFilterParameter(h,3,FILTER::CUTOFF,500,1000,2); 
    // Oscillates the h's 3rd filter's CUTOFF between 500 and 1000
